﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace CDStore3Tiers
{
    public class XuLyPhatSinh
    {
        static StoreCDDataContext cd = new StoreCDDataContext();
        /// <summary>
        /// khởi tạo lớp xử lý phát sinh
        /// </summary>
        public XuLyPhatSinh()
        {
            cd = new StoreCDDataContext();
            cd.Connection.ConnectionString = getConfig.getConnection();
        }
        /// <summary>
        /// Lấy Danh sách phát sinh của cửa hàng
        /// </summary>
        /// <returns>Danh Sách Phát Sinh</returns>
        public static List<PhatSinh> LayDsPhatSinh()
        {
            cd = new StoreCDDataContext();
            cd.Connection.ConnectionString = getConfig.getConnection();
            List<PhatSinh> Lis = new List<PhatSinh>();

            Lis = (from ps in cd.PhatSinhs
                   select ps).ToList<PhatSinh>();
            return Lis;
        }
        /// <summary>
        /// Thêm mới một bản phát sinh
        /// </summary>
        /// <param name="noidung">nội dung của bản phát sinh</param>
        /// <param name="sotien">số tiền của bản phát sinh</param>
        /// <param name="thoigian">thời gian tạo bản phát sinh</param>
  
        public static void ThemPhatSinh(string noidung, decimal sotien, DateTime thoigian)
        {
            cd.Connection.ConnectionString = getConfig.getConnection();
            // so tien su dung nubericupdown nen khong can bat loi.
            if (sotien > 0 && thoigian <= DateTime.Now)
            {
                cd.PhatSinh_Insert(noidung, sotien, thoigian);
                cd.SubmitChanges();
            }
            else
            {
                if (sotien < 0)
                {
                    throw new InvalidDataException("So tien phai lon hon 0");
                }
                if (thoigian > DateTime.Now)
                {
                    throw new InvalidDataException("thoi gian tao phai truoc hoac bang thoi gian hien tai.");
                }
            }
        }
        /// <summary>
        /// Cập nhật một phát sinh
        /// </summary>
        /// <param name="maphatsinh">mã phát sinh</param>
        /// <param name="noidung">nội dung của bản phát sinh</param>
        /// <param name="sotien">số tiền cần cập nhật</param>
        /// <param name="thoigian">thời gian cập nhật bản phát sinh</param>
        public static void CapNhatPhatSinh(int maphatsinh, string noidung, decimal sotien, DateTime thoigian)
        {
            cd = new StoreCDDataContext();
            cd.Connection.ConnectionString = getConfig.getConnection();
            // so tien su dung nubericupdown nen khong can bat loi.
            if (sotien > 0 && thoigian <= DateTime.Now)
            {
                cd.PhatSinh_Update(maphatsinh, noidung, sotien, thoigian);
                cd.SubmitChanges();
            }
            else
            {
                if (sotien < 0)
                {

                    throw new InvalidDataException();
                }
                if (thoigian > DateTime.Now)
                {
                    throw new InvalidDataException("thoi gian tao phai truoc hoac bang thoi gian hien tai.");
                }
            }
        }
        /// <summary>
        /// Xóa một bản phát sinh
        /// </summary>
        /// <param name="Maphatsinh">mã của bản phát sinh</param>
        public static void XoaPhatSinh(int Maphatsinh)
        {
            cd.PhatSinh_Delete(Maphatsinh);
            cd.SubmitChanges();
        }

        /// <summary>
        /// Lấy mã phát sinh cuối cùng
        /// </summary>
        /// <returns>mã phát sinh</returns>
        public int GetlastPS()
        {
            var a = (from t in cd.PhatSinhs
                     orderby t.MaPhatSinh descending
                     select t.MaPhatSinh).First();
            return a;
        }
        /// <summary>
        /// lấy tồng số trang hiển thị
        /// </summary>
        /// <param name="pagesize">số phát sinh trong 1 trang</param>
        /// <returns>số trang</returns>
        public int TongSoTrang(int pagesize)
        {
            cd = new StoreCDDataContext();
            cd.Connection.ConnectionString = getConfig.getConnection();
            var a = (from t in cd.PhatSinhs
                     select t).Count();
            if (a % pagesize == 0)
            {
                a = (int)a / pagesize;
            }
            else
            {
                a = ((int)a / pagesize) + 1;
            }
            return a;
        }
        /// <summary>
        /// số trang dang hiển thị
        /// </summary>
        /// <param name="pagenumber">tổng số trang</param>
        /// <param name="pagesize">số phát sinh trg trang</param>
        /// <returns>số trang</returns>
        public int SoTrangHienTai(int pagenumber, int pagesize)
        {
            int a = pagenumber;
            if (a % pagesize == 0)
            {
                a = (int)a / pagesize;
            }
            else
            {
                a = ((int)a / pagesize) + 1;
            }
            return a + 1;
        }
    }
}
